Copyright: (c) 1999, Sirotinsky Arthur
Citation: fractal-generation program


Content
Fractal Explorer 1.17

Программа предназначена для графического отображения фрактальных множеств, включая самое известное - Множество Мандельброта; фрактальные орбиты (Orbital fractals), итерационные функциональные системы (Iterated Function Systems - IFS) и трехмерные "странные" аттракторы.

Версия 1.17 включает:

•	98 встроенных формул;

•	80 фильтров;

•	восемь алгоритмов расчета цвета с настраиваемой палитрой;

•	компилятор формул

•	конструктор фракталей;

•	конструктор "странных" аттракторов;

•	конструктор IFS;

Основные возможности:

•	98 встроенных формул, среди которых Мандельброт/Julie/Newton-подобные полиномы и фрактальные орбиты;

•	поддержка нескольких методов расчета: M-Set основной, F-Set (он же - N-Set), Julie, инверсия (Inside Out), 3D-рендеринг;

•	конструктор фрактальных полиномов;

•	конструктор IFS;

•	генератор 3D-аттракторов/IFS;

•	трехмерный рендеринг 3D-аттракторов/IFS;

•	рендеринг фрактальных ландшафтов;

•	специальные эффекты достигаются путем наложения одного из 80 фильтров;

•	четыре алгоритма расчета палитры;

•	математическое сглаживание и антиалиасинг;

•	создание AVI-клипов для различных вариантов изменения фрактала:

•	изменение количества итераций - iteration movie;

•	изменение масштаба или координат - zoom movie;

•	изменение значения параметров P1, P2 или P3 - parametrical movie;

•	изменение сконструированного полинома - transformation movie;

•	трансформация одной IFS в другую - IFS movie;

•	изменение значений Julie-параметров - julie movie;

•	вращение 3D-аттрактора/IFS - 3D-attractors movie;

•	трансформация одного 3D-аттрактора в другой - 3D-attractors movie;

Примечание:

Для создания AVI-клипов мы рекомендуем выбирать формат "Microsoft Video 1" (с прочими форматами могут возникать различные проблемы);

•	полученные изображения могут быть сохранены в форматах Windows Bitmap (BMP), JPEG или во внутреннем параметрическом формате - так называемом SPOT-файле (FRS, FRI или FR3);

•	реальная многопоточность математических вычислений;

•	двойная точность вычислений (до 15 десятичных знаков);

•	поддержка командной строки и операции Drag&Drop для файлов четурех типов:

*.frp	- файлы палитр;

*.frs	- spot-файлы;

*.fr3	- файлы 3D-аттракторов/IFS;

*.fri	- файлы IFS-формул;

и многое другое...

Содержание:

Что такое фрактал

Требования к системе

Инсталляция

Начало работы

Встроенные формулы

Сервисные функции

Благодарности

Лицензионное соглашение

_________

(c) 1998,99

Sirotinsky A.A. & Fedorenko O.V.

c.Kiev, Ukraine.


WhatIsIt
Что такое фракталь ?

Для тех, кто с фракталями (так же произносятся: "фракталами") не знаком, краткий экскурс в историю:

Термин "фрактал" происходит от латинского "fractus" - сломанный, разбитый, расчлененный. Именно этим свойством отличается всякая фрактальная структура от привычных фигур и тел. Фракталь не задается в готовом виде, а образуется путем бесконечного повторения какой-либо исходной формы во все уменьшающемся масштабе по определенному алгоритму или формуле.

Множество реальных объектов имеют фрактальную структуру: облака, горы, деревья, турбулентные потоки. Даже кровеносная система человека - не что иное, как сложнейшая пространственная фракталь.

Математик фирмы IBM Бенуа Мандельброт (Benoit B. Mandelbrot) получил математическое определение фрактали. "Множество Мандельброта" задается удивительно простой формулой:

Z <- Z * Z + C

Здесь переменная Z и константа С - комплексные числа , отображаемые точками на комплексной плоскости. Суть алгоритма состоит в последовательном расчете значений Z, каждый раз подставляя в формулу значение Z, полученное на предыдущем шаге. Начальное значение Z соответствует координатам рассчитываемой точки. Классический вид множества получается при С=0. В этом случае формула сводится к бесконечному ряду (((ZІ+Z)І+Z)І+Z)І+...

Данный ряд может сходиться (т.е. модуль Zk остается конечным при любом количестве шагов k) или же улетает в бесконечность с различной скоростью, которая зависит только от координат точки Z°. Графическое отображение множества Мандельброта заключается в вычислении ряда для каждой точки (количество итераций зависит от выбранного масштаба, но, как правило, более 1000 шагов не требуется) и выборе цвета исходя из значения счетчика итераций с которым был покинут цикл. См. также раздел "M-Set и F-Set методы расчета".

Здесь необходимо маленькое примечание:

В литературе иногда описывают классический вариант множества Мандельброта как формулу у которой начальное значение Z=0, a C представляет собой координаты точки и ряд описывается как (((СІ+С)І+С)І+С)І+... Но на наш взляд, тут дело только в терминологии: суть алгоритма не меняется.

Вариант формулы, когда присутствует комплексная константа C, имеет название "Julie-set" и формула записывается как ((((Z+C)І+C)І+C)І+C)І+... Разница на первый взгляд невелика, но вид фрактали полностью меняется !

Следует отметить, что формулы фракталей множеством Мандельброта далеко не ограничиваются. Например, если квадрат заменить третей, четвертой и так далее степенями, то можно получить новые фрактали, ничуть не похожие на оригинального Мандельброта.

[Подробнее]

[Множество Мандельброта]

[Фрактальные орбиты]

[Содержание]


Mandel
Множество Мандельброта

Эта фракталь названа в честь Бенуа Мандельброта (Benoit Mandelbrot), впервые описавшего ее. Ее формула очень проста:

Z <- Z * Z + C

Все расчеты производятся на комплексной плоскости (см. раздел "Что такое фрактали").

Нормальное множество формируется при C равном координатам рассчитываемой точки. Если задать C равным некоторой константе, одинаковой для каждой точки, то можно получить Julie-вид множества, внешний вид которого будет меняться в зависимости от значения C и никогда не будет похож на нормальное множество.

Например, при С={0.4, 0.5} фракталь имеет следующий вид:

[Содержание]


_Julie
Множество Julie

Рассмотрим формулу Множества Мандельброта:

Z <- Z*Z + C

Нормальный вид фрактали получается тогда, когда в качестве величины C принимается начальная координата каждой расчитываемой точки Z°. Эта величина остается неизменной для каждой итерации.

Julie-метод расчета предполагает наличие некоторой константы, одинаковой для всех расчитываемых точек фрактали. Формула Мандельброта при этом принимает следующий вид:

Z <- (((C+Z)І+Z)І+Z)І+..

При этом, вид фрактали непосредственно зависит от величины С:

Естественно, не каждая фракталь может быть расчитана таким образом. Например, достаточно известный "Sierpinsky Triangle" описывается следующим алгоритмом:

  If Z.imag>0.5 Then  Z <- {2*Z.real, 2*Z.imag-1}

                       Else  If Z.realZ>0.5 Then Z <- {2*Z.real -1, 2*Z.imag}

                                                     Else Z <- {2*Z.real, 2*Z.imag}

и не допускает расчет в Julia-методе.


Theory
Теоретические подробности

Эта странная фигура кому-то покажется безобразной, а кому-то удастся увидеть в ней красоту Хаоса... Именно такой вид имеет классический вариант множества, открытого Бенуа Мандельбротом в 1980 году. Как и все гениальное, его формула очень проста:

Z' ‹– Z*Z + C.

Здесь «Z» - комплексное число, и все расчеты производятся на комплексной плоскости:

Z = a + jb, где j - корень из «-1».

Умножение комплексных чисел вычисляется по формуле:

a' = a1 * a2 - b1 * b2

b' = a1 * b2 + a2 * b1

если же Z1 = Z2, формула упрощается и, в оптимизированном виде, может быть записана так:

a' = (a - b) * (a + b)

b' = 2 * a * b

Таким образом, если принять «С» равным «Z°», мы получим следующее:

Z' = Z° * Z°,

Z'' = Z' * Z' + Z°,

Z''' = Z'' * Z'' + Z°,

...

Принцип расчета заключается в том, что для каждой точки комплексной плоскости последовательно вычисляется все новые и новые значения Z'. Несложно убедиться в том, что для большинства точек модуль Z' рано или поздно улетит в бесконечность (модуль вычисляется как корень из суммы квадратов действительной и мнимой части комплексного числа), причем скорость этого улетания различна. Однако, не для всех точек модуль Z' будет непрерывно возрастать: сколько бы итераций Вы не выполнили - величина всегда останется в некоторых достаточно малых пределах. Как правило, достаточно расчитать квадрат [-2.5, 2] [1.5, -2]. В результате, Вы получите фигуру, представленную на рисунке выше.

Яркость синего цвета зависит от скорости улетания: более темные точки улетают быстрее, чем более светлые. Черным цветом обозначены точки, которые вобще не улетают в бесконечность. Черная область получила название "черный карлик" (если повернуть ее по часовой стрелке, то она действительно напоминает пузатого человечка).

Самое интересное начинается, если начать углубляться в одно из светлых ответвлений:

В глубине мы вновь находим "черного карлика" ! В этом и заключается самое главное свойство фракталов - самоповторение до бесконечности !!!

Если в классической формуле «С» заменить на комплексную константу (одинаковую, естественно, для всех точек плоскости), мы получим следующую последовательность:

Z' = Z° * Z° + C,

Z'' = Z' * Z' + C,

Z''' = Z'' * Z'' + C,

...

Полученная фигура не будет иметь с "черным карликом" ничего общего и будет меняться при самых незначительных изменениях константы «С». Это - так называемое «Julia»-множество (или просто «Julia»).

Алгоритм расчета фрактала может быть таким:

  For i=1 to Width {

    For j=1 to Height {

      a0 = -2.5 + i*4/Width

      b0 =  2 - i*4/Height

      an = a0

      bn = b0

      Image[i,j] = ColorBlack

      For k=1 to MaxIter {

          an = (an - bn) * (an + bn) + a0

          bn =  2 * an * bn  + b0

          If an*an+bn*bn > BailOut {

             Image[i,j] = GetColor(k)

             Break        // (выйти из цикла по «k»)

          }

      }

    }

  }

Размер изображения принят Width*Height. На комплексной плоскости расчитывается квадрат [-2.5,2] [1.5,-2]. MaxIter - верхний предел количества итераций, по достижении которого будем считать, что ряд сходится (черная область). MaxIter редко берется больше 1000. Для выбранного нами квадрата вполне достаточно ста итераций. Величина BailOut - квадрат модуля Z' - принимается, как правило, равной четырем.

Существует множество алгоритмов расчета цвета, мы обозначили их функцией GetColor(k). Однако, простой градиентный метод расчета уходит в прошлое...

По-настоящему красивые фракталы можно получить используя фильтры. Вкратце: в изложенном выше алгоритме, сразу после расчета an и bn, вызывается процедура, которая производит некоторые операции над текущим Z', а результаты своих вычислений, уже после расчета, добавляет к счетчику итераций...

Фильтрация реализована в программах Стива Фергюсона (Inkblot Kaos, Tiera-Zon, Flarium и других), Ultra Fractal и, конечно же, в нашем Fractal Explorer.

Stiven C.Ferguson.	http://home.hiwaay.net/~stephenf/

UltraFractal Home:	http://www.ultrafractal.com/

За более подробной информацией мы отсылаем Вас к Fractals FAQ by Michael C. Taylor. К сожалению, этот текст англоязычный, но, тем не менее, может дать ответы на многие вопросы как теоретические, так и практические. Найти его можно в конференции sci.fractals или по следующим адресам:

ftp://rtfm.mit.edu/pub/usenet/news.answers/sci/fractals-faq

http://www.mta.ca/~mctaylor/sci.fractals-faq/

http://graffiti.cribx1.u-bordeaux.fr/MAPBX/louvet/sci.fractals-faq/faq.html

[Множество Мандельброта]

[Содержание]


FandMset
F-Set и M-Set методы расчета

Расчет фрактали заключается в пошаговом вычислении полинома и анализе значения Zk на каждом шаге.

M-Set метод предполагает проверку ряда на сходимость (см. раздел "Что такое фракталь") и анализ скорости, с которой величина модуля Z улетает в бесконечность. Как правило, модуль Z сравнивают с некоторой конечной величиной BailOut и условие завершения итерационного процесса выглядит так:

|Z| > BailOut

В случае F-Set метода предполагается сходимость ряда и анализируется скорость падения величины модуля Z к нулю. Условие выхода из цикла записывается так:

|Z| < 10E-n

Допускается совмещение методов F-Set и M-Set:

[Содержание]


orbits
Фрактальные орбиты

(Orbital Fractal)

В отличие от Множества Мандельброта фрактальные орбиты расчитываются для одной конкретной точки (это значение называется Seed), а на графическую плоскость выводятся точки, получаемые после каждой итерации. Естественно, количество итераций, необходимых для получения достаточной для отображения картины, примерно на два-три порядка больше, чем в случае расчета обычного фрактального множества. Кстати, очень интересно наблюдать за процессом построения орбиты !

В качестве примера можно привести один из вариантов формулы Hopalong:

NewX = y + Sin(ABS(A*x - C))

NewY = y - Sin(ABS(B*x - C))

При этом, в начале расчета значения X и Y равны Seed.

Вид OF зависит от значения Seed и меняется в весьма широких пределах, определяемых, естественно, видом формулы. Для Seed = {0.5, 0.5} орбита имеет вид:

[Содержание]


IFS
Итерационные функциональные системы

(IFS)

IFS в чем-то похожи на фрактальные орбиты. Принцип их расчета точно такой же. Однако, расчет всегда производится по одной и той же формуле:

NewX = A*x + B*y + С

NewY = D*x + E*y + F

В большей степени вид IFS зависит от шести констант, обозначенных буквами от A до F. От начального значения (Seed) вид фрактали, как правило, не зависит.

Главное отличие IFS заключается в том, что для каждого конкретного состояния фрактали задается не один набор констант-параметров, а несколько (не менее двух) и для каждого набора указывается вероятность ее выбора в долях единицы. В качестве примера можно привести IFS "Fern", формирующую изображение древесного листа:

A	B	C	D	E	F	P

0.0	0.0	0.0	0.16	0.0	0.0	0.01

0.85	0.04	-0.04	0.85	0.0	1.6	0.85

0.2	-0.26	0.23	0.22	0.0	1.6	0.07

-0.15	0.28	0.26	0.24	0.0	0.44	0.07

Расчет требует порядка 15 тысяч итераций:

[Содержание]


navigation
Средства навигации

1. Навигация при помощи клавиатуры

Клавиши управления курсором (←,↑,→ и ↓) сдвигают фракталь на 10 пикселов. При нажатом Shift - на один пиксел (точный сдвиг). При нажатом Ctrl  - на 25 пикселов (грубый сдвиг).

Клавиши "+" и "-" на дополнительной клавиатуре увеличивают или уменьшают масштаб вдвое сохраняя неизменным центр текущего изображения.

Клавиша "Insert" возвращает координаты и масштаб фрактали в исходное, жестко заданное в программе значение.

2. Навигация при помощи мыши

Двойной щелчок левой кнопкой мыши увеличивает масштаб вдвое относительно курсора. Двойной щелчок правой кнопки мыши уменьшает масштаб вдвое относительно курсора.

При помощи мыши можно выделить интересующий Вас участок и изменить масштаб изображения так, чтобы вписать выделение в экран. Для этого нажмите левую кнопку мыши и, неотпуская ее, выделите нужный фрагмент, после чего отпустите кнопку.

3. Навигация посредством меню

Пункты "View full set", "Zoom in" и "Zoom out" меню "FRACTAL" выполняют действия, аналогичные клавишам "Insert", "+" и "-" соответственно.

[Содержание]


system
Требования к системе

Windows 95/98, 8-16 Мб ОЗУ, 1.5-2 Mb дискового пространства;

Настоятельно рекомендуется High или True Color видеорежим;

Поддержка OpenGL;

Функционирование под Windows NT не гарантируется.

Однако, по заверениям тестеров FE вполне нормально работает под Windows NT 4.0.

[Содержание]


Install
Инсталляция

Fractal Explorer не требует инсталляции.

Создайте новый каталог, разверните туда полученный архив и запустите файл FE.EXE.

Для удаления Fractal Explorer - удалите созданный для него каталог вместе со всем содержимым.

[Содержание]


thanks
Благодарности

Вадиму Бочечко

oik@rdc.centre.energy.gov.ua

за тестирование и советы;

Stephen C. Ferguson

http://home.hiwaay.net/~stephenf/

за его программы и исходные тексты к ним, за множество отличных идей и за тестирование Fractal Explorer;

Julien C. Sprott

http://sprott.physics.wisc.edu/fractals/

за книгу "STRANGE ATTRACTORS (Creating Patterns in Chaos)". The University of Wisconsin. Madison, Wisconsin;

Andy Gibson

http://www.gibsona.demon.co.uk/

за пакет "RenderLight".

"Renderlight является компонентом для Borland (Inprise) Delphi, который позволяет создавать и рендерить программно описанные трехмерные сцены. Реализованы: освещение, тени, антиалиасинг и другие функции";

Charles D Parkhurst

http://www.parkhurst.net/

разработчик и WEB-мастер, на его сайте вы можете найти большую коллекцию хранителей экрана, среди которых - FeFractal Cube 1 screensaver demo